/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import bean.Candidato;
import interfaces.CandidatoInterface;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author VENANCIO
 */
public class CandidatoDao implements CandidatoInterface {

    private Connection con;
    private String sql;
    private Candidato candidato;
    private List<Candidato> listaCandidato;

    public CandidatoDao() {
    }

    /**
     * Método que insere um novo candidato à tabela
     *
     * @param c
     */
    @Override
    public void inserir(Candidato c) {
        try {


            sql = "INSERT INTO CANDIDATO(CANDIDATO_CPF, CANDIDATO_SENHA, CANDIDATO_NOME, CANDIDATO_EMAIL,"
                    + "CANDIDATO_RUA, CANDIDATO_N, CANDIDATO_BAIRRO, CANDIDATO_CIDADE, CANDIDATO_UF, "
                    + "CANDIDATO_CEP, CANDIDATO_RG, CANDIDATO_ORGAO_EMISSOR, CANDIDATO_NASCIMENTO, CANDIDATO_SEXO,"
                    + "CANDIDATO_ESTADO_CIVIL, CANDIDATO_PORTADOR_DEFICIENCIA, CANDIDATO_DEFICIENCIA, CANDIDATO_IDIOMAS,"
                    + "CANDIDATO_INFORMATICA, CANDIDATO_HABILITACAO, CANDIDATO_VEICULO, CANDIDATO_VIAJAR, "
                    + "CANDIDATO_MUDAR, CANDIDATO_NACIONALIDADE)"
                    + " VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            con = new Conexao().getConexao();

            int cont = 1;
            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setString(cont++, c.getCpf());
            stmt.setString(cont++, c.getSenha());
            stmt.setString(cont++, c.getNome());
            stmt.setString(cont++, c.getEmail());
            stmt.setString(cont++, c.getRua());
            stmt.setString(cont++, c.getNumero());
            stmt.setString(cont++, c.getBairro());
            stmt.setString(cont++, c.getCidade());
            stmt.setString(cont++, c.getUf());
            stmt.setString(cont++, c.getCep());
            stmt.setString(cont++, c.getRg());
            stmt.setString(cont++, c.getOrgaoEmissor());
            stmt.setDate(cont++, (Date) c.getDataNacimento());
            stmt.setString(cont++, c.getSexo());
            stmt.setString(cont++, c.getEstadoCivil());
            stmt.setBoolean(cont++, c.isPortadorDeficiencia());
            stmt.setString(cont++, c.getDeficiencia());
            stmt.setString(cont++, c.getIdiomas());
            stmt.setString(cont++, c.getInformatica());
            stmt.setString(cont++, c.getHabilitacao());
            stmt.setBoolean(cont++, c.isVeiculo());
            stmt.setBoolean(cont++, c.isViajar());
            stmt.setBoolean(cont++, c.isMudar());
            stmt.setInt(cont++, c.getCodNacionalidade());
            //stmt.setInt(cont++, c.getAreaProfissional());
            stmt.executeUpdate();
            stmt.close();

        } catch (SQLException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * Consulta todos os candidatos
     *
     * @return uma lista de candidatos
     */
    @Override
    public List<Candidato> consulta() {
        List<Candidato> candidato = new ArrayList<Candidato>();
        try {
            sql = "SELECT * FROM CANDIDATO";

            con = new Conexao().getConexao();

            PreparedStatement stmt = con.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                Candidato c = new Candidato();
                c.setCpf(rs.getString("CANDIDATO_CPF"));
                c.setNome(rs.getString("CANDIDATO_NOME"));
                c.setSenha(rs.getString("CANDIDATO_SENHA"));
                c.setEmail(rs.getString("CANDIDATO_EMAIL"));
                c.setRua(rs.getString("CANDIDATO_RUA"));
                c.setNumero(rs.getString("CANDIDATO_N"));
                c.setBairro(rs.getString("CANDIDATO_BAIRRO"));
                c.setCep(rs.getString("CANDIDATO_CEP"));
                c.setCidade(rs.getString("CANDIDATO_CIDADE"));
                c.setUf(rs.getString("CANDIDATO_UF"));
                c.setRg(rs.getString("CANDIDATO_RG"));
                c.setOrgaoEmissor(rs.getString("CANDIDATO_ORGAO_EMISSOR"));
                c.setDataNacimento(rs.getDate("CANDIDATO_NASCIMENTO"));
                c.setSexo(rs.getString("CANDIDATO_SEXO"));
                c.setEstadoCivil(rs.getString("CANDIDATO_ESTADO_CIVIL"));
                c.setPortadorDeficiencia(rs.getBoolean("CANDIDATO_PORTADOR_DEFICIENCIA"));
                c.setDeficiencia(rs.getString("CANDIDATO_DEFICIENCIA"));
                c.setIdiomas(rs.getString("CANDIDATO_IDIOMAS"));
                c.setInformatica(rs.getString("CANDIDATO_INFORMATICA"));
                c.setHabilitacao(rs.getString("CANDIDATO_HABILITACAO"));
                c.setVeiculo(rs.getBoolean("CANDIDATO_VEICULO"));
                c.setViajar(rs.getBoolean("CANDIDATO_VIAJAR"));
                c.setMudar(rs.getBoolean("CANDIDATO_MUDAR"));
                //c.setNacionalidade(rs.getString("CANDIDATO_NACIONALIDADE"));
               // c.setCodNacionalidade(rs.getInt("CANDIDATO_NACIONALIDADE"));
                //c.setEmail(rs.getString("AREA_PROFISSIONAL_COD"));

                candidato.add(c);
            }

            rs.close();
            stmt.close();
            return candidato;

        } catch (SQLException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return candidato;
    }

    @Override
    public void excluir(Candidato c) {

        try {
            con = new Conexao().getConexao();
            sql = "DELETE FROM CANDIDATO WHERE CANDIDATO_CPF = " + c.getCpf();
            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    @Override
    public void alterar(Candidato c) {
        try {
            sql = "UPDATE TABLE  CANDIDATO SET CANDIDATO_CPF=?, CANDIDATO_SENHA=?, CANDIDATO_NOME=?, CANDIDATO_EMAIL=?,"
                    + "CANDIDATO_RUA=?, CANDIDATO_N=?, CANDIDATO_BAIRRO=?, CANDIDATO_CIDADE=?, CANDIDATO_UF=?, "
                    + "CANDIDATO_CEP=?, CANDIDATO_RG=?, CANDIDATO_ORGAO_EMISSOR=?, CANDIDATO_NASCIMENTO=?, CANDIDATO_SEXO=?,"
                    + "CANDIDATO_ESTADO_CIVIL=?, CANDIDATO_PORTADOR_DEFICIENCIA=?, CANDIDATO_DEFICIENCIA=?, CANDIDATO_IDIOMAS=?,"
                    + "CANDIDATO_INFORMATICA=?, CANDIDATO_HABILITACAO=?, CANDIDATO_VEICULO=?, CANDIDATO_VIAJAR=?,"
                    + " CANDIDATO_MUDAR=?, CANDIDATO_NACIONALIDADE=?";

            con = new Conexao().getConexao();
            int cont = 1;
            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setString(cont++, c.getCpf());
            stmt.setString(cont++, c.getSenha());
            stmt.setString(cont++, c.getNome());
            stmt.setString(cont++, c.getEmail());
            stmt.setString(cont++, c.getRua());
            stmt.setString(cont++, c.getNumero());
            stmt.setString(cont++, c.getBairro());
            stmt.setString(cont++, c.getCidade());
            stmt.setString(cont++, c.getUf());
            stmt.setString(cont++, c.getCep());
            stmt.setString(cont++, c.getRg());
            stmt.setString(cont++, c.getOrgaoEmissor());
            stmt.setDate(cont++, (Date) c.getDataNacimento());
            stmt.setString(cont++, c.getSexo());
            stmt.setString(cont++, c.getEstadoCivil());
            stmt.setBoolean(cont++, c.isPortadorDeficiencia());
            stmt.setString(cont++, c.getDeficiencia());
            stmt.setString(cont++, c.getIdiomas());
            stmt.setString(cont++, c.getInformatica());
            stmt.setString(cont++, c.getHabilitacao());
            stmt.setBoolean(cont++, c.isVeiculo());
            stmt.setBoolean(cont++, c.isViajar());
            stmt.setBoolean(cont++, c.isMudar());
            stmt.setInt(cont++, c.getCodNacionalidade());
            // stmt.setInt(cont++, c.getAreaProfissional());
            stmt.executeUpdate();
            stmt.close();

        } catch (SQLException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    @Override
    public boolean procuraCPF(Candidato c) {
        boolean test = false;
        try {
            sql = "SELECT * FROM CANDIDATO WHERE CANDIDATO_CPF = " + c.getCpf();

            con = new Conexao().getConexao();
            PreparedStatement stmt = con.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();

            if (rs.first() != test) {
                test = true;
            }
            rs.close();
            stmt.close();

        
        } catch (SQLException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(CandidatoDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        
        }
                    return test;

    }
    
}